#include "SendRequest.h"
#include <curl/curl.h>
#include <glib.h>
#include <gio/gio.h>

// 发送get请求
void sendGetRequest(const char* url,size_t (*fn)(void*, size_t, size_t , void*)){
    // 1 初始化curl，得到一个CURL对象
    CURL *curl = curl_easy_init();
    if(curl)
    {
        // 2 做请求配置，设置url路径 设置回调函数
        curl_easy_setopt(curl,CURLOPT_URL,url);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,fn);

        // 3 发起请求
        CURLcode code = curl_easy_perform(curl);
        if(code != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(code));
        }

        // 4 清理curl对象
        curl_easy_cleanup(curl);
    }
}

// 发送post请求
void sendPostRequest(const char* url,const char* param,size_t (*fn)(void*, size_t, size_t , void*)){
    // 1 初始化curl，得到一个CURL对象
    CURL *curl = curl_easy_init();
    if(curl)
    {
        // 2 做请求配置，设置url路径 设置回调函数
        curl_easy_setopt(curl,CURLOPT_URL,url);
        curl_easy_setopt(curl,CURLOPT_POSTFIELDS,param);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,fn);

        // 3 发起请求
        CURLcode code = curl_easy_perform(curl);
        if(code != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(code));
        }

        // 4 清理curl对象
        curl_easy_cleanup(curl);
    }
}

int downloadRes(char *url,char * savleFilePath){
    // 判断本地文件是否存在，如果不存在需要先创建
    gboolean exist = g_file_test(savleFilePath,G_FILE_TEST_EXISTS);
    if(!exist)
    {
        // 先创建本地文件
        GFile *file = g_file_new_for_path(savleFilePath);
        if(!g_file_create(file,G_FILE_CREATE_NONE,NULL,NULL))
        {
            printf("文件创建失败!\n");
            return -1;
        }
    }

    //要保存的文件路径
    FILE *saveFile =  fopen(savleFilePath,"wb");
    //初始化
    CURL *curl = curl_easy_init();
    if (curl)
    {
        //设置相关参数  url  存数据的文件
        curl_easy_setopt(curl,CURLOPT_URL,url);   
        //设置访问资源之间存放文件
        curl_easy_setopt(curl,CURLOPT_FILE,saveFile);  
        
        //发请求
         CURLcode res = curl_easy_perform(curl);

        //判断是否发送成功
        if (res!=CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
            return -1;
        }
        curl_easy_cleanup(curl);
    }
    return 0;
}